#include <stdio.h>
#include <stdlib.h>

/* 以下概念介绍引自 https://blog.csdn.net/weixin_38984030/article/details/86076074 https://www.cnblogs.com/accper/p/9136466.html */
/*  概念
    线性表是最基本、最简单、也是最常用的一种数据结构。
    线性表（linear list）是数据结构的一种，一个线性表是n个具有相同特性的数据元素的有限序列。
    对于同一个线性表，其每一个数据元素的值虽然不同，但必须具有相同的数据类型。
    
    集合中必存在唯一的一个“第一元素”。
    集合中必存在唯一的一个 “最后元素” 。
    除最后一个元素之外，均有唯一的后继(后件)。
    除第一个元素之外，均有唯一的前驱(前件)。
*/

/*  线性表包括顺序存储和链式存储：
    顺序存储：顺序表里面元素的地址是连续的。
    链式存储：单链表、双链表、循环链表和静态链表；前三个，里面节点的地址不是连续的，是通过指针连起来的。
        链式存储与顺序存储相比，允许存储空间不连续，插入删除时不需要移动大量的元素，
        只需修改指针即可，但查找某个元素，只能从头遍历整个链表。
*/

/*  顺序存储，顺序表，特点
    顺序表，使用数组实现，一组地址连续的存储单元，数组大小有两种方式指定，一是静态分配，二是动态扩展。
    随机访问特性，查找O(1)时间，存储密度高；逻辑上相邻的元素，物理上也相邻；
    便于随机存储。
    不便于插入和删除操作，这是因为在顺序表上进行的插入和删除操作会引起大量数据元素的移动。
    线性表从1开始，而数组从0开始。
*/

/*  基本操作如下：
    线性表的置空操作clear()：将一个已经存在的线性表置为空表。
    线性表判空操作isEmpty()：判断线性表是否为空，若为空，则返回true；否则，返回为false。
    求线性表的长度操作length()：求线性表中的数据元素的个数并返回其值。
    取元素操作get(i)：读取并返回线性表中的第i个数据元素的值。其中i的取值范围为0≤i≤length()-1。
    插入操作insert(i,x)：在线性表的第i个数据元素之前插入一个值为x的数据元素。其中i的取值范围为0≤i≤length()。当i=0时，在表头插入x；当i=length()时，在表尾插入x。
    删除操作remove(i)：删除并返回线性表中第i个数据元素。其中i的取值范围为0≤i≤length()-1。
    查找操作indexOf(x)：返回线性表中首次出现的指定的数据元素的位序号，若线性表中不包含此数据元素，则返回-1。
    
    说白了，就是在一个数组上实现上面的操作。
*/


